package com.ctbri.typeinfo.pets;

public class Individual implements Comparable<Individual>{

	private static long counter = 0;
	private final long id = counter++;
	private String name;
	
	public Individual(String name) {
		this.name = name;
	}
	
	public Individual() {
		
	}
	
	public String toString() {
		return getClass().getSimpleName() + 
				(name == null ? "" : " " + name);
	}
	
	public long id() {
		return id;
	}
	
	public boolean equals(Object o) {
		return o instanceof Individual 
				&& id == ((Individual)o).id;
	}
	
	public int hashCode() {
		int result = 17;
		if(name != null)
			result = 37 * result + name.hashCode();
		result = 37 * result + (int)id;
		return result;
	}
	
	@Override
	public int compareTo(Individual individual) {
		String first = getClass().getSimpleName();
		String argFirst = getClass().getSimpleName();
		int firstCompare = first.compareTo(argFirst);
		if(firstCompare != 0)
			return firstCompare;
		if(name != null && individual.name != null){
			int secondCompare = name.compareTo(individual.name);
			if(secondCompare != 0)
				return secondCompare;
		}
		return (individual.id < id ? -1 : (individual.id == id ? 0 : 1));
	}
	

}
